﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.Collections.ObjectModel;
using System.Data;

namespace Reviewer.Entities.Services
{
    /// <summary>
    /// Game View Interface
    /// </summary>
    [ServiceContract(Namespace = "Reviewer.Services")]
    public interface IGameViewService : IDisposable
    {
        /// <summary>
        /// Finds the top by the specified date limits to the top count.
        /// </summary>
        /// <param name="forDate">For date.</param>
        /// <param name="topCount">The top count.</param>
        /// <returns></returns>
        Collection<GameView> FindTopBy(DateTime forDate, int topCount);

        /// <summary>
        /// Logs the game view.
        /// </summary>
        /// <param name="gameId">The game id.</param>
        /// <param name="gameUid">The game uid.</param>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Uid")]
        void LogView(int gameId, Guid gameUid);

        /// <summary>
        /// Compiles the view statistics.
        /// </summary>
        /// <returns></returns>
        DataSet CompileViewStatistics();

        /// <summary>
        /// Compiles the view statistics by genre.
        /// </summary>
        /// <param name="genreId">The genre id.</param>
        /// <returns></returns>
        DataSet CompileViewStatisticsByGenre(Int32 genreId);

        /// <summary>
        /// Compiles the view statistics by format.
        /// </summary>
        /// <param name="formatId">The format id.</param>
        /// <returns></returns>
        DataSet CompileViewStatisticsByFormat(Int32 formatId);
    }
}
